"""
变量的作用域
    概述：
        变量的作用域指的是，变量在哪里能用，在哪里不能用，即，变量起作用的方位
    分类：
        局部变量：定义在函数内部，或者 函数形参列表中的变量
        全局变量： 定义在函数外的变量， 或者用  global 关键字修饰的变量

    面试题： 局部变量 和 全局变量的区别
        1. 定义位置不同
            局部变量： 定义在函数内部，或者 函数形参列表中的变量
            全局变量： 定义在函数外的变量， 或者用  global 关键字修饰的变量
        2. 内存存储位置不同
            局部变量： 在调用方法的时候随着方法入栈，在栈内存中被创建
            全局变量：存储在方法区
        3. 生命周期不同
            局部变量： 随着函数的调用而被创建，随和函数的调用完毕而消失
            全局变量：随着 .py文件被加载而被创建，随着.py文件从内存中移除而消失
"""
# 案例以：演示 局部变量的声明周期
def func1():
    a = 10 # 局部变量
    print(f'a={a}')


# 报错 超出了局部变量的作用域
# print(print(f'a={a}'))

def func2(b): # b 是局部变量
    b **= 2
    print(f'b={b}')

# 报错 超出了局部变量的作用域
# print(f'b={b}')



# 案例二： 演示全局变量的声明周期
c = 100

def func3():
    print(f'c={c}')

# 演示global关键字定义 全局变量

def func4():
    d = 10 # 局部变量
    global c # 因为c被global修饰了，所以e是全局变量
    c = 123
    print(f'd={d},c={c}') # 变量遵循就近原则


print('程序开始了')
# # func1()
# func2(5)
# func3()
func4()
print('程序结束了')